package data;
import domain.Quedada;
import domain.QuedadaUsuario;
import domain.Usuario;
import java.sql.*;
import java.util.List;
import java.util.LinkedList;

public class JDBCQuedadaUsuarioDAO implements IQuedadaUsuarioDAO{
	
	public List selectAllUsuariosQuedada(String quedadaOID){
		
		Connection conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		ResultSet result = null;
		List listaUsuarios = new LinkedList();
		String sql = 	"SELECT U.OID, U.NICK, U.PASSWORD, U.PROVINCIA, U.MUNICIPIO, U.CORREO, U.TELEFONO, U.SKINOID, U.NOMBRE "+
						"FROM QuedadaUsuario QU INNER JOIN Usuario U ON QU.USUARIOOID = U.OID "+
						"WHERE QU.QUEDADAOID = ?";
		try {
			stmt = conn.prepareStatement(sql);
			stmt.setString(1, quedadaOID);
			result = stmt.executeQuery();
			while (result.next()) {
				Usuario user = rellenarUsuario(result);
				listaUsuarios.add(user);
			}
		} catch (SQLException e) {
			System.out.println("Message: " + e.getMessage());
			System.out.println("SQLState: " + e.getSQLState());
			System.out.println("ErrorCode: " + e.getErrorCode());
		} finally {
			try {
				if (result != null) {
					result.close();
				}
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException e) {
			}
		}
		return listaUsuarios;
	}
	
	public List selectAllQuedadasUsuario (String usuarioOID){
		
		Connection conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		ResultSet result = null;
		List listaQuedada = new LinkedList();
		String sql = 	"SELECT QU.OID,QU.QUEDADAOID,QU.USUARIOOID "+
						"FROM QuedadaUsuario QU INNER JOIN Quedada Q ON QU.QUEDADAOID = Q.OID "+
						"WHERE QU.USUARIOOID = ?";
		try {
			stmt = conn.prepareStatement(sql);
			stmt.setString(1, usuarioOID);
			result = stmt.executeQuery();
			while (result.next()) {
				Quedada quedada = rellenarQuedada(result);
				listaQuedada.add(quedada);
			}
		} catch (SQLException e) {
			System.out.println("Message: " + e.getMessage());
			System.out.println("SQLState: " + e.getSQLState());
			System.out.println("ErrorCode: " + e.getErrorCode());
		} finally {
			try {
				if (result != null) {
					result.close();
				}
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException e) {
			}
		}
		return listaQuedada;
	}
	
	public void delete(QuedadaUsuario quedadaUsuario) {
		Connection conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "DELETE FROM QuedadaUsuario WHERE (OID = ?) ";
		try {	
			stmt = conn.prepareStatement(sql);
            stmt.setString(1, quedadaUsuario.getQuedadaOID());
            stmt.executeUpdate();
		} catch (SQLException e) {
			System.out.println("Message: " + e.getMessage());
			System.out.println("SQLState: " + e.getSQLState());
			System.out.println("ErrorCode: " + e.getErrorCode());
		} finally {
			try {
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException e) {
			}
		}
		
	}

	public void insert(QuedadaUsuario quedadaUsuario) {
		Connection conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "INSERT INTO QuedadaUsuario (OID,QUEDADAOID,USUARIOOID) VALUES  (?, ?, ?) ";
		try {	
			stmt = conn.prepareStatement(sql);
            stmt.setString(1, quedadaUsuario.getQuedadaUsuarioOID());
            stmt.setString(2, quedadaUsuario.getQuedadaOID());
            stmt.setString(3, quedadaUsuario.getUsuarioOID());
            stmt.executeUpdate();
		} catch (SQLException e) {
			System.out.println("Message: " + e.getMessage());
			System.out.println("SQLState: " + e.getSQLState());
			System.out.println("ErrorCode: " + e.getErrorCode());
		} finally {
			try {
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException e) {
			}
		}
	}
	
	private Usuario rellenarUsuario(ResultSet result) throws SQLException {
		Usuario user = new Usuario();
		user.setUsuarioOID(result.getString("OID"));
		user.setNombre(result.getString("NOMBRE"));
		user.setNick(result.getString("NICK"));
		user.setPassword(result.getString("PASSWORD"));
		user.setProvincia(result.getString("PROVINCIA"));
		user.setMunicipio(result.getString("MUNICIPIO"));
		user.setCorreo(result.getString("CORREO"));
		user.setTelefono(result.getString("TELEFONO"));
		user.setSkin(result.getString("SKIN"));
		return user;
	}
	
	private Quedada rellenarQuedada(ResultSet result) throws SQLException {
		Quedada quedada = new Quedada();
		quedada.setQuedadaOID(result.getString("OID"));
		quedada.setNombre(result.getString("NOMBRE"));
		quedada.setFechainicio(result.getDate("FECHAINICIO"));
		quedada.setLugar(result.getString("LUGAR"));
		quedada.setDescripcion(result.getString("DESCRIPCION"));
		quedada.setCupomax(result.getInt("CUPOMAX"));
		return quedada;
	}

}



